package com.softeem.yqst_server.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.softeem.yqst_server.dto.Result;
import com.softeem.yqst_server.enity.Music;
import com.softeem.yqst_server.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

@RequestMapping("/music")
@RestController
public class MusicController {

    @Autowired
    private MusicService musicService;

    //完成以下有关音乐资源的管理功能

    /**
     * 添加音乐信息
     *
     * @param music 音乐对象，包含音乐的详细信息
     * @return 返回操作结果，成功则返回添加的音乐信息，失败则返回错误信息
     */
    @PostMapping("/add")
    public Result add(Music music){
        // 通过音乐服务保存音乐信息
        boolean b = musicService.save(music);
        // 根据保存结果返回相应的操作结果
        return b ? Result.ok().setMsg("添加成功").setData(music) : Result.fail().setMsg("添加失败");
    }

    //2. 音乐列表查询
    @GetMapping("/listAll")
    public Result listAll(){
        // 通过音乐服务查询音乐列表
        return Result.ok().setData(musicService.list());
    }

    /**
     * 分页查询音乐信息
     */
    @GetMapping("/list")
    public Result list(Integer page, Integer limit){
        //分页查询（需要配置分页拦截器）  select * from music  limit ?,?  (AOP：面相切面编程)
        List<Music> list = musicService.list(new Page<Music>(page, limit));
        return Result.ok().setData(list);
    }

    //3. 音乐删除(根据ID)
    @GetMapping("/delete")
    public Result delete(Integer id){
        // 通过音乐服务删除音乐信息
        boolean b = musicService.removeById(id);
        // 根据删除结果返回相应的操作结果
        return b ? Result.ok().setMsg("删除成功") : Result.fail().setMsg("删除失败");
    }

    //4. 根据音乐名称模糊查询
    @GetMapping("/search")
    public Result search(String name,Integer page,Integer limit){
        //构建查询条件包装器（ name like '%...%'）
        QueryWrapper<Music> query = Wrappers.query(Music.class).like("name", name);
        // 通过音乐服务查询音乐列表(含分页)
        List<Music> list = musicService.list(new Page<Music>(page,limit),query);
        return Result.ok().setData(list);
    }

    //5. 根据ID修改音乐信息
    @PutMapping("/update")
    public Result update(Music music){
        // 通过音乐服务修改音乐信息
        boolean b = musicService.updateById(music);
        // 根据修改结果返回相应的操作结果
        return b ? Result.ok().setMsg("修改成功") : Result.fail().setMsg("修改失败");
    }

    //6. 根据ID查询音乐详情
    @GetMapping("/detail")
    public Result detail(Integer id){
        // 通过音乐服务查询音乐详情
        Music music = musicService.getById(id);
        // 返回查询结果
        return Objects.nonNull(music) ? Result.ok().setData(music) : Result.fail().setMsg("无结果");
    }

}
